package com.company.beauty.domain.mapper;

import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>基础mapper</p>
 *
 * @author Lionel Lee
 * @version 1.0: BaseMapper.java
 * @date 2020/8/19 15:54
 */
public interface BaseMapper<T, Example, ID> {

    /**
     * 统计记录数
     * @param example 条件
     * @return long
     */
    long countByExample(Example example);

    /**
     * 删除记录
     * @param example 条件
     * @return long
     */
    int deleteByExample(Example example);

    /**
     * 删除记录
     * @param id 主键
     * @return long
     */
    int deleteByPrimaryKey(ID id);

    /**
     * 插入
     * @param record 记录
     * @return int
     */
    int insertSelective(T record);

    /**
     * 插入
     * @param record 记录
     * @return int
     */
    int insert(T record);

    /**
     * 根据主键查询
     * @param example 查询条件
     * @return  List<T>
     */
    List<T> selectByExample(Example example);

    /**
     * 根据主键查询
     * @param id 主键
     * @return int
     */
    T selectByPrimaryKey(ID id);

    /**
     * 更新
     * @param record 记录
     * @param example  条件
     * @return int
     */
    int updateByExampleSelective(@Param("record") T record, @Param("example") Example example);

    /**
     * 更新
     * @param record 记录
     * @param example  条件
     * @return int
     */
    int updateByExample(@Param("record") T record, @Param("example") Example example);

    /**
     * 更新
     * @param record 记录
     * @return int
     */
    int updateByPrimaryKeySelective(T record);

    /**
     * 更新
     * @param record 记录
     * @return int
     */
    int updateByPrimaryKey(T record);

    /**
     * 批量插入
     * @param list 记录
     * @return int
     */
    int batchInsert(List<T> list);

    /**
     * 批量更新
     * @param list 记录
     * @return int
     */
    int batchUpdate(List<T> list);

    /**
     * 批量更新
     * @param list 记录
     * @return int
     */
    int batchReplace(List<T> list);


    /**
     * 批量动态插入
     *
     * @param list 记录
     * @return int
     */
    void batchInsertSelective(List<T> list);

}
